/**
 * Created by DING on 2025/3/12.
 * */
#include "Task2.h"
#include <fstream>
#include <algorithm> // std::min
#include <cstring>   // memcpy
#include <vector>
#include <iostream>
#include <iomanip> // 用于设置输出格式
BaseObject *createTask2() {
    return new Task2();
}

void destroyTask2(BaseObject *p) {
    SAFE_DELETE(p);
}

Task2::Task2(){
}

Task2::~Task2() {
}

/* 如果使用了DDS_Reader或者DDS_Writer，则对应的input或者output前64个字节为DataFormat head首部 */
void Task2::onCompute(buffer_table_t *input, buffer_table_t *output) {
    LOG_INFO("(%lld)onCompute:%s", this->outputSequence, this->instanceName.c_str());

    // 获取原始数据指针
    const uint8_t *raw_data = reinterpret_cast<const uint8_t*>(input->list[0]->data);
    int total_length = input->list[0]->len; // 数据总字节数

    // 头部大小（64 字节）
    const int HEADER_SIZE = 68;

    // 确保数据足够长才能读取 64 字节
    if (total_length < HEADER_SIZE) {
        LOG_ERROR("Data length too short, cannot read 64 bytes.");
        return;
    }

    // 输出前 64 字节的 16 进制格式
    std::cout << "First 64 bytes in hex format:!!!!!!!!!" << std::endl;
    for (int i = 0; i < HEADER_SIZE; ++i) {
        std::cout << std::hex << std::setw(2) << std::setfill('0')
                  << static_cast<int>(raw_data[i]) << " ";

        // 每 16 个字节换行，方便查看
        if ((i + 1) % 16 == 0) {
            std::cout << std::endl;
        }
    }

  /** 获取端口数据指针示例
   * const char *src0 = input->list[0]->data;
   * char *dest0 = output->list[0]->data;
   * */


  /** 计算示例
   * if (input->list[0]->valid) {
   *     memcpy(dest0, src0, std::min(input->list[0]->len, output->list[0]->len));
   *   }
   * */
}
